package com.bao.work.student;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentManagement {
    /**
     * 输出常量
     */
    public static final Scanner INPUT=new Scanner(System.in);
    public static ArrayList<Student> students=new ArrayList<>();
    /**
     * 打印菜单
     */
    private void printMenu() {
        System.out.println("--------欢迎来到学生管理系统--------");
        System.out.println("1 添加学生");
        System.out.println("2 删除学生");
        System.out.println("3 修改学生");
        System.out.println("4 查看学生");
        System.out.println("5 退出");
        System.out.println("请输入您的选择:");
    }

    /**
     * 判断选择功能
     * @param i 键盘录入的数字———>指向某一功能
     * @return 返回布尔值，用于中止循环
     */
    private boolean switchAction(int i) {
        switch (i) {
            case 1:
                addStudent(students);
                /*
                    调用添加方法
                 */
                break;
            case 2:
                deleteStudent(students);
                /*
                    调用删除方法
                 */
                break;
            case 3:
                updateStudent(students);
                /*
                    调用修改方法
                 */
                break;
            case 4:
                findAllStudent(students);
                /*
                    调用查看方法
                 */
                break;
            default:
                System.err.println("退出系统");
                return false;
        }
        return true;
    }

    /**
     * 死循环保证程序一直运行中
     */
    public void whileMain(){
        boolean flag=true;
        while(flag){
            printMenu();
            flag=switchAction(INPUT.nextInt());
        }
    }

    /**
     * 添加学生
     * @param students 默认的学生集合
     */
    private void addStudent(ArrayList<Student> students){
        Student newStudent=createStudent();
        if(newStudent==null){
            return;
        }
        System.out.println("您想要添加的学生信息如下\n"+newStudent);
        if(confirmContinue()){
            if(students.add(newStudent)){
                System.out.println("添加成功");
            }else {
                System.out.println("添加失败");
            }

        }else {
            System.err.println("退出操作");
        }
    }

    /**
     * 删除学生信息
     * @param students 默认学生集合
     */
    private void deleteStudent(ArrayList<Student> students){
        if(students.size()<=0){
            System.err.println("学生信息为空");
            return;
        }
        System.out.println("请输入你要删除的学生的学号");
        String findSid=INPUT.next();
        int index=findIndex(students,findSid);
        if(index<0){
            System.err.println("您要删除的学生信息不存在");
            return;
        }
        System.out.println("您要删除学生信息如下");
        System.out.println(students.get(index).toString());
        if(confirmContinue()){
            students.remove(index);
            System.out.println("删除成功");
        }
        else {
            System.err.println("取消删除");
        }

    }

    /**
     * 修改学生信息
     * @param students 默认学生集合
     */
    private void updateStudent(ArrayList<Student> students){
        if(students.size()<=0){
            System.err.println("学生信息为空");
            return;
        }
        System.out.println("请输入你要修改的学生的学号");
        String findSid=INPUT.next();
        int index=findIndex(students,findSid);
        if(index<0){
            System.err.println("您要修改的学生信息不存在");
            return;
        }
        System.out.println("您要修改学生信息如下");
        System.out.println(students.get(index).toString());
        if(confirmContinue()){
            Student newStudent=createStudent();
            if(newStudent!=null&&confirmContinue()){
                students.set(index,newStudent);
                System.out.println("修改成功");
            }
            else {
                System.err.println("取消修改");
            }
        }
        else {
            System.err.println("取消修改");
        }

    }

    /**
     * 查询所有学生信息
     * @param students 默认学生集合
     */
    private void findAllStudent(ArrayList<Student> students){
        if(students.size()<=0){
            System.err.println("学生信息为空");
            return;
        }
        for (Student student : students) {
            System.out.println(student.toString());
        }

    }

    /**
     * 寻找索引
     * @param students 默认学生集合
     * @param findSid 一个需要寻找的学号
     * @return 该学号所在的索引位置
     */
    private int findIndex(ArrayList<Student> students,String findSid){
        for(int i=0;i<students.size();i++){
            if(students.get(i).getSid().equals(findSid)){
                return i;
            }
        }
        return -1;
    }

    /**
     * 根据输入信息创建一个学生对象
     * @return 返回创建好的学生对象
     */
    private Student createStudent(){
        System.out.println("请输入学生的学号");
        String newSid=INPUT.next();
        if(findIndex(students,newSid)>=0){
            System.err.println("学号已存在");
            return null;
        }
        System.out.println("请输入学生的姓名");
        String newName=INPUT.next();
        System.out.println("请输入学生的年龄");
        int newAge=INPUT.nextInt();
        System.out.println("请输入学生的生日（yyyy-MM-dd）");
        String newBirthday=INPUT.next();
        return new Student(newSid,newName,newAge,newBirthday);
    }

    /**
     * 根据输入信息判断是否继续操作
     * @return 返回输入结果与y的值的比较结果
     */
    private boolean confirmContinue(){
        System.out.println("确认继续操作？（y/n）");
        String flag=INPUT.next();
        return "y".equals(flag);
    }

}
